In many data processing applications, including those used in networking and communication applications, input data is provided to the processing system in a number of packet streams or flows. Packets that belong to the same stream are typically processed using the same ancillary data, sometimes referred to as commands and context. The commands and context can include state information, operands, and other data used in processing the packets of a particular stream. Example ancillary data can include security keys or tokens (e.g., for use in processing streams associated with encrypting and/or decrypting data), initialization vectors, protocol information, and other metadata used to process a stream of data packets. Often, the data processing operations are offloaded from the main processing architecture to specialized hardware configured to perform the various data processing operations.
Systems that handle a large number of data streams usually attempt to store the ancillary data for a number of streams in low-latency local storage devices in order to shorten processing time. However, because the systems only have a limited memory capacity, the systems are often required to repeatedly swap out ancillary data from local storage devices to slower, external storage devices. As a result, while processing a number of different streams or flows, the systems are often required to reload the ancillary data from these other, slower, storage devices. This adds a significant amount of time to packet processing and increases congestion on internal and external memory busses.